home *** CD-ROM | disk | FTP | other *** search
- SUBROUTINE CMPAR ( S1, S2, IERR )
- C*
- C* *******************************
- C* *******************************
- C* ** **
- C* ** CMPAR **
- C* ** **
- C* *******************************
- C* *******************************
- C*
- C* SUBPROGRAM :
- C* COMPARE UNITS
- C*
- C* AUTHOR :
- C* ART RAGOSTA
- C* MS 207-5
- C* AMES RESEARCH CENTER
- C* MOFFETT FIELD, CA 94035
- C* (415) 694-5578
- C*
- C* PURPOSE :
- C* COMPARE THE CALCULATED UNITS WITH THE REQUESTED UNITS, IF
- C* THEY ARE THE SAME, SUCCESS, OTHERWISE THE REQUESTED NON-STD
- C* UNITS WERE NOT COMPATIBLE WITH THE STANDARD UNITS.
- C*
- C* INPUT ARGUMENTS :
- C* S1 - ONE UNIT STRING
- C* S2 - THE OTHER
- C*
- C* OUTPUT ARGUMENTS :
- C* NONE
- C*
- C* INTERNAL WORK AREAS :
- C* NONE
- C*
- C* COMMON BLOCKS :
- C* NONE
- C*
- C* FILE REFERENCES :
- C* NONE
- C*
- C* SUBPROGRAM REFERENCES :
- C* NONE
- C*
- C* ERROR PROCESSING :
- C* NONE
- C*
- C* TRANSPORTABILITY LIMITATIONS :
- C* NONE
- C*
- C* ASSUMPTIONS AND RESTRICTIONS :
- C* NONE
- C*
- C* LANGUAGE AND COMPILER :
- C* ANSI FORTRAN 77
- C*
- C* VERSION AND DATE :
- C* VERSION I.0 24-SEP-85
- C*
- C* CHANGE HISTORY :
- C* 24-SEP-85 INITIAL VERSION
- C*
- C***********************************************************************
- C*
- CHARACTER *(*) S1, S2
- CHARACTER *6 TOP(50), BOT(50), WORK
- LOGICAL ERROR
- C
- ERROR = .FALSE.
- IERR = 0
- CALL CAPS ( S1 )
- L = LENGTH ( S1 )
- C
- C --- PASS 1, REPLACE '-' WITH '*' AND '**' WITH '^'
- C
- J = 0
- I = 1
- 5 IF (S1(I:I) .EQ. '-') THEN
- J = J + 1
- S1(J:J) = '*'
- C
- C --- ALL OTHER CHARACTERS EXCEPT ' ' GET COPIED
- C
- ELSE IF (S1(I:I) .NE. ' ') THEN
- J = J + 1
- S1(J:J) = S1(I:I)
- ENDIF
- I = I + 1
- IF ( I .LE. L )GO TO 5
- S1(J+1:) = ' '
- C
- C --- PASS 2, PARSE INTO TOKENS
- C
- CALL PARSE ( S1, J, TOP, NTOP, ERROR )
- IF ( ERROR ) THEN
- IERR = 1
- RETURN
- ENDIF
- C
- K = LENGTH(S2)
- CALL PARSE ( S2, K, BOT, NBOT, ERROR )
- BOT(NBOT+1) = ' '
- IF ( ERROR ) THEN
- IERR = 1
- RETURN
- ENDIF
- C
- C --- NOW ASCERTAIN THAT TOP AND BOT ARE FUNCTIONALLY IDENTICAL
- C --- ( THOUGH NOT INFALLABLE, THIS TEST IS DONE BY SORTING THE
- C --- ARRAYS AND REQUIRING THE RESULT TO BE IDENTICAL.)
- C
- IF ( NTOP .NE. NBOT ) THEN
- IERR = 4
- ELSE
- CALL QSORT ( TOP, NTOP, WORK )
- CALL QSORT ( BOT, NBOT, WORK )
- DO 10 I = 1,NTOP
- IF ( TOP(I) .NE. BOT(I) ) GO TO 20
- 10 CONTINUE
- ENDIF
- RETURN
- 20 IERR = 4
- RETURN
- END
- C
- C---END CMPAR
- C
-